#pragma once

#include <vector>
#include <functional>

#include "Mathematica.h"

namespace congruent_packing
{

typedef std::vector<PointF> Solution;
typedef std::function<void (int, double)> on_best_record_f;
typedef std::function<void (int, double)> on_new_solution_f;

class local_search_t
{
public:
	local_search_t();
	virtual ~local_search_t();
public:
	virtual Solution work() = 0;
public:
	on_best_record_f on_best_record;
	on_new_solution_f on_new_solution;
};

};